/*
 Aqui a lei é public static , tirando isso não tem lei
 */
package br.zeos.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
import javax.swing.filechooser.FileFilter;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.io.IOUtils;

public class POG {

    public static byte[] loadBIN(File arquivo) {
        byte[] b = null;
        try {
            b = IOUtils.toByteArray(new FileInputStream(arquivo));
        } catch (Exception e) {
        }
        return b;
    }

    /**
     * Lê um arquivo e retorna a representação hexadecimal que é usado na
     * armazenagem dos tipos blobs
     *
     * @param file Arquivo a ser lido
     * @return Representação em hexadecimal
     */
    public static String fileToSQL(File file) {
        return Hex.encodeHexString(loadBIN(file));
    }

    public static String byteToSQL(byte[] mordida) {
        if (mordida == null) {
            return null;
        }
        return Hex.encodeHexString(mordida);
    }

    /**
     * Transforma um hexadecima em um array de bytes para gravar com a classe
     * UtilFile exemplo UtilFile.writeBIN("a.jpg", Bd.sQLToFile("aa a1 00"));
     *
     * @param input
     * @return Array de bytes
     */
    public static byte[] sQLToFile(String input) {
        byte[] retorno = null;
        try {
            retorno = Hex.decodeHex(input.toCharArray());
        } catch (Exception e) {
//            e.printStackTrace();
        }
        return retorno;
    }

    /**
     * Inicia um seletor de ARQUIVOS
     *
     * @param pasta_inicial pasta inicial
     * @param filtro final do UtilFile
     * @param descricao descrição do UtilFile
     * @return UtilFile selecionado
     */
    public static File selectFile(String pasta_inicial, String[] filtro, String descricao) {
        if (pasta_inicial.trim().isEmpty()) {
            pasta_inicial = System.getProperty("user.dir");
        }
        final ArrayList sis = new ArrayList();
        sis.addAll(Arrays.asList(filtro));
        final String desc = descricao;
        JFileChooser jfc = new JFileChooser(pasta_inicial, FileSystemView.getFileSystemView());
        jfc.setFileFilter(new FileFilter() {
            @Override
            public boolean accept(File file) {
                for (int i = 0; i < sis.size(); i++) {
                    if (file.getName().contains(sis.get(i).toString()) || file.isDirectory()) {
                        return true;
                    }
                }
                return false;
            }

            @Override
            public String getDescription() {
                return desc;
            }
        });
        int r = jfc.showOpenDialog(null);
        if (r == JFileChooser.APPROVE_OPTION) {
            return jfc.getSelectedFile();
        }
        return null;
    }

    /**
     * Inicia um seletor de PASTAS
     *
     * @param pasta_inicial pasta inicial
     * @return Pasta selecionada
     */
    public static File selectFolder(String pasta_inicial) {
        JFileChooser jfc = new JFileChooser(pasta_inicial);
        jfc.setFileSelectionMode(JFileChooser.OPEN_DIALOG);
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        jfc.setFileFilter(new FileFilter() {
            @Override
            public boolean accept(File file) {
                if (file.isDirectory()) {
                    return true;
                }
                return false;
            }

            @Override
            public String getDescription() {
                return "Pastas";
            }
        });
        int r = jfc.showOpenDialog(null);
        if (r == JFileChooser.APPROVE_OPTION) {
            return jfc.getSelectedFile();
        }
        return null;
    }
    /**
     * Inicia um seletor de PASTAS
     *
     * @param pasta_inicial pasta inicial
     * @return Pasta selecionada
     */
    public static File saveFile(String pasta_inicial) {
        JFileChooser jfc = new JFileChooser(pasta_inicial);
        jfc.setFileSelectionMode(JFileChooser.SAVE_DIALOG);        
//        jfc.setFileFilter(new FileFilter() {
//            @Override
//            public boolean accept(File file) {
//                if (file.isDirectory()) {
//                    return true;
//                }
//                return false;
//            }
//
//            @Override
//            public String getDescription() {
//                return "Pastas";
//            }
//        });
        int r = jfc.showOpenDialog(null);
        if (r == JFileChooser.APPROVE_OPTION) {
            return jfc.getSelectedFile();
        }
        return null;
    }

}
